package t844

/*
给定 S 和 T 两个字符串，当它们分别被输入到空白的文本编辑器后，判断二者是否相等，并返回结果。 # 代表退格字符。



示例 1：

输入：S = "ab#c", T = "ad#c"
输出：true
解释：S 和 T 都会变成 “ac”。
示例 2：

输入：S = "ab##", T = "c#d#"
输出：true
解释：S 和 T 都会变成 “”。
示例 3：

输入：S = "a##c", T = "#a#c"
输出：true
解释：S 和 T 都会变成 “c”。
示例 4：

输入：S = "a#c", T = "b"
输出：false
解释：S 会变成 “c”，但 T 仍然是 “b”。


提示：

1 <= S.length <= 200
1 <= T.length <= 200
S 和 T 只含有小写字母以及字符 '#'。
*/

func backspaceCompare(S string, T string) bool {
	var stack MyStack
	var stack2 MyStack

	for _, v := range []rune(S) {
		if "#" == string(v) {
			// 退格
			_, _ = stack.Pop()
		} else {
			stack.Push(v)
		}
	}

	for _, v := range []rune(T) {
		if "#" == string(v) {
			// 退格
			_, _ = stack2.Pop()
		} else {
			stack2.Push(v)
		}
	}

	if len(stack.Items) != len(stack2.Items) {
		return false
	}

	for {
		val1, err := stack2.Pop()
		if err != nil {
			break
		}
		val2, err := stack.Top()
		if err != nil {
			break
		}
		if val1 != val2 {
			break
		} else {
			_, _ = stack.Pop()
		}
	}

	if len(stack.Items) != 0 {
		return false
	}
	return true
}
